home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Hardware
/
BetaScan
/
BetaScanDev
/
Include
/
scanner.h
< prev
Wrap
C/C++ Source or Header
|
1999-01-23
|
7KB
|
215 lines
//
// Scanner include
//
// StormC
//
// version 98.12.31
//
#ifndef SCANNER_H
#define SCANNER_H
#include <exec/types.h>
#include <exec/io.h>
// Non standard command for a scanner device driver
#define SCANCMD_CONTROL CMD_NONSTD
// Status codes
#define SCAN_STATUS_OK 0
#define SCAN_STATUS_EOF 1
// Open error codes
#define SCAN_OPNERR_DEVICE 5
#define SCAN_OPNERR_NOT_SCANNER 6
#define SCAN_OPNERR_UNKNOWN 7
#define SCAN_OPNERR_MEMORY 8
#define SCAN_OPNERR_FATAL 9
#define SCAN_ERR_NOTSCANNING 10
#define SCAN_ERR_not_used 11
#define SCAN_ERR_MEMORY 12
#define SCAN_ERR_READY 13
#define SCAN_ERR_PARAMETER 14
#define SCAN_ERR_HARDWARE 15
#define SCAN_ERR_COMMUNICATION 16
#define SCAN_ERR_MISC 17
typedef int fixed;
/* double <-> fixed point conversion */
#define DOUBLE_FIX(v) ((int) ((v)*(1 << 16)))
#define FIX_DOUBLE(v) (((double)(v)/(double)(1 << 16)))
#define FIX_INT(v) ((v)>>16)
#define INT_FIX(v) ((v)<<16)
typedef enum
{
ID_NONE = 0,
ID_SCANMODE,
ID_TL_X, /* upper left corner of scan area */
ID_TL_Y, /* upper left corner of scan area */
ID_BR_X, /* bottom right corner of scan area */
ID_BR_Y, /* bottom right corner of scan area */
ID_RESOLUTION, /* scan resolution (combined x and y) */
ID_HALFTONEPATTERN,
ID_BRIGHTNESS,
ID_CONTRAST,
ID_ANALOGGAMMA,
ID_BLACKLEVEL, /* some times called shadow */
ID_WHITELEVEL, /* some times called highlight */
ID_THRESHOLD,
ID_EXPOSURETIME,
ID_ADF,
ID_SPEED,
ID_NUMBER_OF_OPTIONS
} OptionId;
typedef enum
{
TYPE_BOOL = 0,
TYPE_INT,
TYPE_FIXED, /* Fixed point number - use DOUBLE_FIX and */
/* FIX_DOUBLE macros to convert to double */
TYPE_STRING
} ValueType;
typedef enum
{
UNIT_NONE = 0, /* the value is unit-less (e.g., # of scans) */
UNIT_PIXEL, /* don't use! */
UNIT_BIT, /* value is number of bits */
UNIT_MM, /* value is millimeters */
UNIT_DPI, /* value is dots per inch */
UNIT_PERCENT, /* value is a percentage */
UNIT_MICROSECOND /* value is micro seconds */
} ValueUnit;
typedef enum
{
CONSTRAINT_NONE = 0,
CONSTRAINT_RANGE,
CONSTRAINT_WORD_LIST,
CONSTRAINT_STRING_LIST
} Constraint;
typedef struct
{
int min;
int max;
int quant;
}
Range;
struct OptionDescriptor
{
OptionId od_optionID;
ValueType od_valueType;
ValueUnit od_valueUnit;
Constraint od_constraintType;
union
{
char** stringList; /* Null terminated array of string values */
int* numberList; /* Legal values - numberList[0] = number */
Range* numberRange;
}
od_constraint;
void* od_specialInfo; /* See below */
};
//
// If non zero, special info has a content depending of option id
//
// ID_SCANMODE: If constraint type is a list specialInfo is
// a pointer to an int list of scan depth values
//
// ID_HALFTONEPATTERN: A pointer to an int list of boolean values
// telling if the pattern works for the
// corresponding scan mode
//
// ID_BRIGHTNESS: If ValueType is not UNIT_PERCENT and
// ID_CONTRAST: constraint type is a list specialInfo is
// a pointer to an int list of percentage
// values corresponding to each value in the
// constraint list.
//
struct ScannerOptions
{
char so_scannerVendor[40];
char so_scannerModel[40];
UBYTE so_driverVersion;
UBYTE so_driverRevision;
double so_docWidth; /* Paper size in mm */
double so_docHeight;
UWORD so_flags; /* Not used */
UWORD so_optionNum; /* Number of option descriptors */
struct OptionDescriptor* so_descriptor;
};
//
// Structure to be used by controlOption routine
//
struct OptionValue
{
OptionId sp_optionID;
int sp_value;
ULONG sp_flags;
};
// optionValue flags
//
#define CONTROL_SET (1<<0) /* Set new value */
#define CONTROL_GET (1<<1) /* Return current value */
/* If both bits are set then */
/* SET is exec. before GET */
#define CONTROL_ROUNDED (1<<16) /* Value set is not exact */
#define CONTROL_RANGE (1<<17) /* Out of range - not set */
#define CONTROL_DISABLED (1<<18) /* Option disabled - not set */
#define CONTROL_INVALID (1<<19) /* Option not supported */
#define CONTROL_CALLMASK 0x0000FFFF
#define CONTROL_RETURNMASK 0xFFFF0000
typedef enum
{
FORMAT_BW = 0,
FORMAT_GRAY, /* 8 bit gray scale */
FORMAT_RED,
FORMAT_GREEN,
FORMAT_BLUE,
FORMAT_RGB, /* Each pixel as 3 (24bit) byte RGB */
FORMAT_RGB_RANDOM /* Colors separated in 8 bit red, */
} LineFormat; /* green and blue components ariving */
/* (posibly) in random order. Used by */
/* 3 pass scanners. */
struct ScanInformation
{
double sv_xResolution; /* actual horizontal resolution */
double sv_yResolution; /* actual vertical resolution */
LineFormat sv_lineFormat; /* format of scan lines */
UWORD sv_imageWidth; /* image width in pixels */
UWORD sv_imageHeight; /* image height in pixels */
UWORD sv_imageDepth; /* image depth in bits */
UWORD sv_bytesPerLine; /* bytes per line read */
ULONG sv_Flags; /* data information flags */
};
struct ScanLine
{
UBYTE* sl_data;
LineFormat sl_color; /* If sv_lineFormat is FORMAT_RGB_RANDOM */
}; /* this is either FORMAT_RED, FORMAT_GREEN */
/* or FORMAT_BLUE. Otherwise it must be the */
/* same as sv_lineFormat. */
#endif /* SCANNER_H */